use rand::Rng;
use std::cmp::Ordering;
use std::io;
use std::{thread, time};
use std::fmt::Debug;
use std::net::{IpAddr, Ipv4Addr};


pub fn option_method() {
    println!("#################################");
    println!("##      option_                 ");
    println!("#################################");
    println!("option_.");

    let op = Option::from("a");
    println!("option_method Option op is: {:#?}", op);

    let op1: Option<u8> = Option::default();
    println!("option_method Option op1 is: {:#?}", op1);

    let some_string = Some("a string");
    let op2: Option<u16> = Option::None;
    // Option<T> 枚举被包含在了 prelude 之中，你不需要将其显式引入作用域。
    // <T> 语法是一个泛型类型参数
    // let op2: Option<u16> = None;
    println!("option_method Option op2 is: {:#?}, some_string:{:#?}", op2, some_string);

    // Option 取值
    let some_string_value = some_string.unwrap();
    // let some_string_value = None.unwrap_or("bike").unwrap();
    println!("option_method Option get value: {:#?}", some_string_value);
    assert_eq!(some_string_value, "a string");

}